Linux 任务计划crontab

crontab 简介

这里我们看一看crontab 的格式

1
2
3
4
5
6
7
8
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

crontab 准备

crontab 在本实验环境中需要做一些特殊的准备,首先我们会启动 rsyslog,以便我们可以通过日志中的信息来了解我们的任务是否真正的被执行了(在本实验环境中需要手动启动,而在自己本地中 Ubuntu 会默认自行启动不需要手动启动)

1
sudo service rsyslog start

在本实验环境中 crontab 也是不被默认启动的,同时不能在后台由 upstart 来管理,所以需要我们来启动它(同样在本实验环境中需要手动启动,自己的本地 Ubuntu 的环境中也不需要手动启动)

1
sudo cron -f &

crontab 使用

添加计划任务

1
crontab -e

在文档的最后一排加上这样一排命令,该任务是每分钟我们会在 /home/shiyanlou 目录下创建一个以当前的年月日时分秒为名字的空白文件

1
2
3
4
5
6
*/1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S)
# 注意
# “ % ” 在 crontab 文件中,有结束命令行、换行、重定向的作用
# 前面加 ” \ ” 符号转意,
# 否则,“ % ” 符号将执行其结束命令行或者换行的作用,
# 并且其后的内容会被做为标准输入发送给前面的命令。

查看添加的任务

1
crontab -l

察看任务是否启动

1
2
3
ps aux | grep cron
# or
pgrep cron

若没有启动,执行上文准备中的第二步

查看日志

1
sudo tail -f /var/log/syslog

删除任务

1
crontab -r

crontab 的深入

每个用户使用 crontab -e添加计划任务,都会在/var/spool/cron/crontabs中添加一个该用户自己的任务文档,这样目的是为了隔离。

如果是系统级别的定时任务只需要以 sudo 权限编辑 /etc/crontab 文件就可以。

cron 服务监测时间最小单位是分钟,所以 cron 会每分钟去读取一次 /etc/crontab/var/spool/cron/crontabs 里面的內容。

/etc 目录下,cron 相关的目录有下面几个:

1
2
3
4
1. /etc/cron.daily,目录下的脚本会每天执行一次,在每天的6点25分时运行;
2. /etc/cron.hourly,目录下的脚本会每个小时执行一次,在每小时的17分钟时运行;
3. /etc/cron.monthly,目录下的脚本会每月执行一次,在每月1号的6点52分时运行;
4. /etc/cron.weekly,目录下的脚本会每周执行一次,在每周第七天的6点47分时运行;

系统默认执行时间可以根据需求进行修改。